package com.wuzheng.wisgo.sanitation.cloud.controller.quartzjob;

import com.wuzheng.wisgo.sanitation.cloud.model.quartzjob.TaskDefine;
import com.wuzheng.wisgo.sanitation.cloud.service.quartzjob.QuartzJobService;
import com.wuzheng.wisgo.sanitation.cloud.service.quartzjob.impl.QuartzJobServiceImpl;
import org.quartz.JobKey;
import org.quartz.SchedulerException;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

/**
 * Created by sp on 2019/11/6 16:28.
 */
@RestController
public class QuartzJobCrtl {


    @Resource
    private QuartzJobService quartzJobService;


    //假如 这个定时任务的 名字叫做HelloWorld, 组名GroupOne
    private final JobKey jobKey = JobKey.jobKey("HelloWorld", "GroupOne");


    /**
     * 启动
     */
    @GetMapping("/startJob")
    public String startJob() throws SchedulerException {

        //创建一个定时任务
        TaskDefine task = TaskDefine.builder()
                .jobKey(jobKey)
                .cronExpression("0/10 * * * * ? ")   //定时任务 的cron表达式
                .jobClass(QuartzJobServiceImpl.class)   //定时任务 的具体执行逻辑
                .description("这是一个测试的 任务")    //定时任务 的描述
                .build();

        quartzJobService.scheduleJob(task);
        return "start Job success";
    }

    /**
     * 暂停
     */
    @GetMapping("/pauseJob")
    public String pauseJob() throws SchedulerException {
        quartzJobService.pauseJob(jobKey);
        return "pause Job success";
    }


    /**
     * 恢复
     */
    @GetMapping("/resumeJob")
    public String resumeJob() throws SchedulerException {
        quartzJobService.resumeJob(jobKey);
        return "resume Job success";
    }

    /**
     * 删除
     */
    @GetMapping("/deleteJob")
    public String deleteJob() throws SchedulerException {
        quartzJobService.deleteJob(jobKey);
        return "delete Job success";
    }

    /**
     * 修改 cron表达式
     */
    @GetMapping("/modifyobCron")
    public String modifyJobCron() {

        //这是即将要修改cron的定时任务
        TaskDefine modifyCronTask = TaskDefine.builder()
                .jobKey(jobKey)
                .cronExpression("0/5 * * * * ? ")   //定时任务 的cron表达式
                .jobClass(QuartzJobServiceImpl.class)   //定时任务 的具体执行逻辑
                .description("这是一个测试的 任务")    //定时任务 的描述
                .build();
        if (quartzJobService.modifyJobCron(modifyCronTask))
            return "modify  Job Cron success";
        else return "modify  Job Cron fail";
    }


}
